#ifndef __USER_CONFIG_H__
#define __USER_CONFIG_H__

#include <stdint.h>
#include <stdbool.h>
#include "wm_gpio.h"
#include "wm_gpio_ex.h"

#define USE_LCD       1   // 必须使能
#define USE_ENCODE    1
#define USE_TOUCHPAD  1
//#define USE_PSRAM     1

#if USE_LCD

/***************************************************************************** 
*   屏幕驱动
*   0   st7789      240*320          
*   1   st7796s     320*480     encoder √     touchpad √
*   2   ili9341     240*320     encoder √     touchpad √
*   3   ili9488               
*   4   nv3401n     480*272
*   5   st7796      320*320                   touchpad √
*   6   st7796s     320*320                   touchpad √
*****************************************************************************/ 
#define LCD_TYPE  (1)


/***************************************************************************** 
*   屏幕方向 
*   0 : 竖屏          
*   1 : 横屏
*****************************************************************************/ 
#define BSP_LCD_Direction (1)


/***************************************************************************** 
*   屏幕分辨率
*   0   240*320          
*   1   320*480     
*   2   320*240  
*   3   480*320            
*   4   480*272
*   5   320*320
*****************************************************************************/ 
#define LCD_SIZE  (1)


/******************************************
*   SDIO	    W800	W801	TFT
*   sdio_ck	    PB_06	PA_09	CLK
*   sdio_cmd	PB_07	PA_10	MOSI
*******************************************/
#define CHIP_TYPE (0)
#if   (CHIP_TYPE == 0)  // GPIOA ---> W801
#define LCD_LED_PORT	GPIOA
#define LCD_LED_PIN		GPIO_PIN_8 //--->>TFT --LED
#define LCD_SCL_PORT	GPIOA
#define LCD_SCL_PIN		GPIO_PIN_9 //--->>TFT --SCL
#define LCD_MOSI_PORT	GPIOA
#define LCD_MOSI_PIN	GPIO_PIN_10 //--->>TFT --DO
#define LCD_TE_PORT		GPIOA
#define LCD_TE_PIN		GPIO_PIN_11	//--->>TFT --TE
#define LCD_DC_PORT		GPIOA
#define LCD_DC_PIN		GPIO_PIN_12	//--->>TFT --RS/DC 
#define LCD_RST_PORT	GPIOA
#define LCD_RST_PIN		GPIO_PIN_13 //--->>TFT --RST
#define LCD_CS_PORT		GPIOA
#define LCD_CS_PIN		GPIO_PIN_14 //--->>TFT --CS
#elif (CHIP_TYPE == 1)  // GPIOB ---> W800/W801/W801S2
#define LCD_LED_PORT	GPIOB
#define LCD_LED_PIN		GPIO_PIN_5 //--->>TFT --LED
#define LCD_SCL_PORT	GPIOB
#define LCD_SCL_PIN		GPIO_PIN_6 //--->>TFT --SCL
#define LCD_MOSI_PORT	GPIOB
#define LCD_MOSI_PIN	GPIO_PIN_7 //--->>TFT --DO
#define LCD_TE_PORT		GPIOB
#define LCD_TE_PIN		GPIO_PIN_8	//--->>TFT --TE
#define LCD_DC_PORT		GPIOB
#define LCD_DC_PIN		GPIO_PIN_9	//--->>TFT --RS/DC 
#define LCD_RST_PORT	GPIOB
#define LCD_RST_PIN		GPIO_PIN_10 //--->>TFT --RST
#define LCD_CS_PORT		GPIOB
#define LCD_CS_PIN		GPIO_PIN_11 //--->>TFT --CS
#elif (CHIP_TYPE == 2)  // GPIOA ---> W802
#define LCD_LED_PORT	GPIOA
#define LCD_LED_PIN		GPIO_PIN_2 //--->>TFT --LED
#define LCD_SCL_PORT	GPIOA
#define LCD_SCL_PIN		GPIO_PIN_9 //--->>TFT --SCL
#define LCD_MOSI_PORT	GPIOA
#define LCD_MOSI_PIN	GPIO_PIN_10 //--->>TFT --DO
#define LCD_TE_PORT		GPIOB
#define LCD_TE_PIN		GPIO_PIN_29	//--->>TFT --TE
#define LCD_DC_PORT		GPIOA
#define LCD_DC_PIN		GPIO_PIN_12	//--->>TFT --RS/DC 
#define LCD_RST_PORT	GPIOA
#define LCD_RST_PIN		GPIO_PIN_7 //--->>TFT --RST
#define LCD_CS_PORT		GPIOA
#define LCD_CS_PIN		GPIO_PIN_14 //--->>TFT --CS
#else                   // Customer 自定义（除SCL和MOSI外，其余可以用普通GPIO）
#define LCD_LED_PORT	GPIOB
#define LCD_LED_PIN		GPIO_PIN_5 //--->>TFT --LED
#define LCD_SCL_PORT	GPIOB
#define LCD_SCL_PIN		GPIO_PIN_6 //--->>TFT --SCL
#define LCD_MOSI_PORT	GPIOB
#define LCD_MOSI_PIN	GPIO_PIN_7 //--->>TFT --DO
#define LCD_TE_PORT		GPIOB
#define LCD_TE_PIN		GPIO_PIN_8	//--->>TFT --TE
#define LCD_DC_PORT		GPIOB
#define LCD_DC_PIN		GPIO_PIN_10	//--->>TFT --RS/DC
#define LCD_RST_PORT	GPIOB
#define LCD_RST_PIN		GPIO_PIN_9 //--->>TFT --RST
#define LCD_CS_PORT		GPIOB
#define LCD_CS_PIN		GPIO_PIN_11 //--->>TFT --CS
#endif
#endif


#if USE_ENCODE
#define ENCODER_S_PORT	GPIOA
#define ENCODER_S_PIN	GPIO_PIN_0
#define ENCODER_A_PORT	GPIOA
#define ENCODER_A_PIN	GPIO_PIN_1
#define ENCODER_B_PORT	GPIOA
#define ENCODER_B_PIN	GPIO_PIN_2
#endif

#if USE_TOUCHPAD
/***************************************************************************** 
*   TOUCHPAD_TYPE
*   0   xpt2046   320*480               
*   1   xpt2046   240*320
*   2   ft5206    320*320
*   3   GT911     320*320
*****************************************************************************/ 
#if   LCD_TYPE == 1 
#define TOUCHPAD_TYPE  0
#elif LCD_TYPE == 2
#define TOUCHPAD_TYPE  1
#elif LCD_TYPE == 5
#define TOUCHPAD_TYPE  2
#elif LCD_TYPE == 6
#define TOUCHPAD_TYPE  3
#endif 


// i2c touchpad
#if     (TOUCHPAD_TYPE == 2)
#define I2C_SDA_PORT	GPIOA
#define I2C_SDA_PIN		GPIO_PIN_4
#define TIRQ_PORT		GPIOA
#define TIRQ_PIN		GPIO_PIN_3
#define TRST_PORT		GPIOA
#define TRST_PIN		GPIO_PIN_2
#define I2C_SCL_PORT	GPIOA
#define I2C_SCL_PIN		GPIO_PIN_1
#elif   (TOUCHPAD_TYPE == 3)
#define I2C_SDA_PORT	GPIOA
#define I2C_SDA_PIN		GPIO_PIN_4
#define TIRQ_PORT		GPIOB
#define TIRQ_PIN		GPIO_PIN_8
#define TRST_PORT		GPIOB
#define TRST_PIN		GPIO_PIN_9
#define I2C_SCL_PORT	GPIOA
#define I2C_SCL_PIN		GPIO_PIN_1
#define 

#else
// spi touchpad
#define TCLK_PORT	GPIOA
#define TCLK_PIN	GPIO_PIN_7
#define TCS_PORT	GPIOA
#define TCS_PIN		GPIO_PIN_6
#define TDIN_PORT	GPIOA
#define TDIN_PIN	GPIO_PIN_5
#define TDOU_PORT	GPIOA
#define TDOU_PIN	GPIO_PIN_4
#define TIRQ_PORT	GPIOA
#define TIRQ_PIN	GPIO_PIN_3
#endif

#endif


#ifdef USE_PSRAM
#define PSRAM_CS_PORT	GPIOB
#define PSRAM_CS_PIN	GPIO_PIN_1
#define PSRAM_CLK_PORT	GPIOB
#define PSRAM_CLK_PIN	GPIO_PIN_0
#define PSRAM_D0_PORT	GPIOB
#define PSRAM_D0_PIN	GPIO_PIN_2
#define PSRAM_D1_PORT	GPIOB
#define PSRAM_D1_PIN	GPIO_PIN_3
#define PSRAM_D2_PORT	GPIOB
#define PSRAM_D2_PIN	GPIO_PIN_4
#define PSRAM_D3_PORT	GPIOB
#define PSRAM_D3_PIN	GPIO_PIN_5
#endif


#endif